home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
C
/
LIB
/
UNIXLIB37B
/
!UnixLib37
/
src
/
resource
/
c
/
setprior
< prev
next >
Wrap
Text File
|
1996-11-09
|
2KB
|
112 lines
/****************************************************************************
*
* $Source: /unixb/home/unixlib/source/unixlib37/src/resource/c/RCS/setprior,v $
* $Date: 1996/05/06 09:03:13 $
* $Revision: 1.2 $
* $State: Rel $
* $Author: unixlib $
*
* $Log: setprior,v $
* Revision 1.2 1996/05/06 09:03:13 unixlib
* Updates to sources made by Nick Burrett, Peter Burwood and Simon Callan.
* Saved for 3.7a release.
*
* Revision 1.1 1996/04/19 21:29:28 simon
* Initial revision
*
***************************************************************************/
static const char rcs_id[] = "$Id: setprior,v 1.2 1996/05/06 09:03:13 unixlib Rel $";
#include <errno.h>
#include <sys/resource.h>
#include <sys/unix.h>
#include <limits.h>
/* A return value of zero indicates success. */
int
setpriority (enum __priority_which which, int who, int prio)
{
int i;
if (who == 0)
{
/* Set the priority of the current process. */
switch (which)
{
case PRIO_PROCESS:
__u->ppri = (prio > PRIO_MAX) ? PRIO_MAX
: (prio < PRIO_MIN) ? PRIO_MIN : prio;
return 0;
break;
case PRIO_PGRP:
__u->gpri = (prio > PRIO_MAX) ? PRIO_MAX
: (prio < PRIO_MIN) ? PRIO_MIN : prio;
return 0;
break;
case PRIO_USER:
__u->upri = (prio > PRIO_MAX) ? PRIO_MAX
: (prio < PRIO_MIN) ? PRIO_MIN : prio;
return 0;
break;
default:
errno = EINVAL;
return -1;
}
return -1;
}
for (i = 0; i < CHILD_MAX; i++)
{
switch (which)
{
case PRIO_PROCESS:
if (__u->child[i].pid == who)
{
if (__u->child[i].gpri > prio)
{
errno = EACCES;
return -1;
}
__u->child[i].ppri = (prio > PRIO_MAX) ? PRIO_MAX
: (prio < PRIO_MIN) ? PRIO_MIN : prio;
return 0;
}
break;
case PRIO_PGRP:
if (__u->child[i].gid == who)
{
if (__u->child[i].gpri > prio)
{
errno = EACCES;
return -1;
}
__u->child[i].gpri = (prio > PRIO_MAX) ? PRIO_MAX
: (prio < PRIO_MIN) ? PRIO_MIN : prio;
return 0;
}
break;
case PRIO_USER:
if (__u->child[i].uid == who)
{
if (__u->child[i].upri > prio)
{
errno = EACCES;
return -1;
}
__u->child[i].upri = (prio > PRIO_MAX) ? PRIO_MAX
: (prio < PRIO_MIN) ? PRIO_MIN : prio;
return 0;
}
break;
default:
errno = EINVAL;
return -1;
}
}
/* Value of 'which' was invalid. */
errno = ESRCH;
return -1;
}